/**
 * emoji重复显示修复工具
 * @author Wu.Liang
 * @date 2025-01-30
 * @description 自动检测和修复emoji字符重复显示问题
 */

/**
 * 检测文本是否包含emoji字符
 * @param {string} text - 要检测的文本
 * @returns {boolean} 是否包含emoji
 */
function containsEmoji(text) {
  if (!text) return false
  
  // emoji正则表达式
  const emojiRegex = /[\u{1F600}-\u{1F64F}]|[\u{1F300}-\u{1F5FF}]|[\u{1F680}-\u{1F6FF}]|[\u{1F1E0}-\u{1F1FF}]|[\u{2600}-\u{26FF}]|[\u{2700}-\u{27BF}]/gu
  
  return emojiRegex.test(text)
}

/**
 * 修复单个元素的emoji显示
 * @param {Element} element - 要修复的元素
 */
function fixElementEmoji(element) {
  if (!element || !element.textContent) return
  
  const text = element.textContent.trim()
  
  // 如果包含emoji字符，添加emoji-text类
  if (containsEmoji(text)) {
    element.classList.add('emoji-text')
  }
}

/**
 * 修复页面中所有emoji元素的显示
 */
export function fixPageEmojis() {
  // 查找所有可能包含emoji的元素
  const selectors = [
    'text',
    'view',
    'span',
    'div',
    '[class*="icon"]:not(.iconfont)',
    '[class*="Icon"]:not(.iconfont)'
  ]
  
  selectors.forEach(selector => {
    try {
      const elements = document.querySelectorAll(selector)
      elements.forEach(fixElementEmoji)
    } catch (error) {
      console.warn(`选择器 ${selector} 查询失败:`, error)
    }
  })
}

/**
 * 监听DOM变化，自动修复新增的emoji元素
 */
export function watchEmojiElements() {
  if (typeof MutationObserver === 'undefined') {
    console.warn('MutationObserver 不支持，无法监听DOM变化')
    return
  }
  
  const observer = new MutationObserver((mutations) => {
    mutations.forEach((mutation) => {
      if (mutation.type === 'childList') {
        mutation.addedNodes.forEach((node) => {
          if (node.nodeType === Node.ELEMENT_NODE) {
            // 修复新增的元素
            fixElementEmoji(node)
            
            // 修复新增元素的子元素
            const childElements = node.querySelectorAll('text, view, span, div, [class*="icon"]:not(.iconfont), [class*="Icon"]:not(.iconfont)')
            childElements.forEach(fixElementEmoji)
          }
        })
      }
    })
  })
  
  // 开始监听
  observer.observe(document.body, {
    childList: true,
    subtree: true
  })
  
  return observer
}

/**
 * 初始化emoji修复
 */
export function initEmojiFixer() {
  // 页面加载完成后修复
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', () => {
      fixPageEmojis()
      watchEmojiElements()
    })
  } else {
    // 页面已经加载完成
    fixPageEmojis()
    watchEmojiElements()
  }
}

/**
 * 手动触发emoji修复
 */
export function triggerEmojiFix() {
  fixPageEmojis()
}

// 自动初始化
if (typeof window !== 'undefined') {
  initEmojiFixer()
}
